HAL DMA2D control functions ¶
HAL DMA2D layer configuration ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
|
In HAL2, the DMA2D layer configuration is performed using one of the following six mode-specific configuration functions depending on the required mode instead:
|
|
HAL1 |
HAL2 |
|
|---|---|---|
|
DMA2D memory-to-memory transfer |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
/* DMA2D layer configuration */
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0xFF;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
hdma2d.LayerCfg[1].InputOffset = 0x0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_mem_copy_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_conf.output.p_dest = (void const*) (uint32_t)&ARGB8888_result;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
/* DMA2D input configuration */
p_conf.input.p_src = (void const*) (uint32_t)&ARGB8888_Tab;
p_conf.input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_NO_MODIF;
p_conf.input.alpha_value = 0xFF;
p_conf.input.color_mode = HAL_DMA2D_INPUT_COLOR_ARGB8888;
p_conf.input.offset = 0;
p_conf.width = 16;
p_conf.height = 16;
HAL_DMA2D_SetConfigMemCopy(&hdma2d, &p_conf);
|
|
DMA2D memory-to-memory transfer with pixel format conversion |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M_PFC;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
/* DMA2D layer configuration */
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0xFF;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_L8;
hdma2d.LayerCfg[1].InputOffset = 0x0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_mem_copy_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_conf.output.p_dest = (void const*) (uint32_t)&L8_result;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
/* DMA2D input configuration */
p_conf.input.p_src = (void const*) (uint32_t)&ARGB8888_Tab;
p_conf.input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_NO_MODIF;
p_conf.input.alpha_value = 0xFF;
p_conf.input.color_mode = HAL_DMA2D_INPUT_COLOR_L8;
p_conf.input.offset = 0;
p_conf.width = 16;
p_conf.height = 16;
HAL_DMA2D_SetConfigMemCopyPFC(&hdma2d, &p_conf);
|
|
DMA2D register-to-memory transfer |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
HAL_DMA2D_Init(&hdma2d);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_mem_fill_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D R2M configuration */
p_conf.output.p_dest = (void const*) (uint32_t)&ARGB8888_result;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
p_conf.fixed_color = 0x89ADCDEF;
p_conf.width = 16;
p_conf.height = 16;
HAL_DMA2D_SetConfigMemFill(&hdma2d, &p_conf);
|
|
DMA2D memory-to-memory with blending transfer |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M_BLEND;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
/* Foreground Configuration */
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0xFF;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[1].InputOffset = 0x0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
/* Background Configuration */
hdma2d.LayerCfg[0].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[0].InputAlpha = 0xFF;
hdma2d.LayerCfg[0].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[0].InputOffset = 0x0;
hdma2d.LayerCfg[0].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[0].RedBlueSwap = DMA2D_RB_REGULAR;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
HAL_DMA2D_ConfigLayer(&hdma2d, 0);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_blending_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_conf.output.p_dest = (void *) OUTPUT_FRAME_BUFFER;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
/* Foreground configuration */
p_conf.fg_input.p_src = (void const*) (uint32_t)&RGB565_64x80_1;
p_conf.fg_input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_NO_MODIF;
p_conf.fg_input.alpha_value = 0xFF;
p_conf.fg_input.color_mode = HAL_DMA2D_INPUT_COLOR_RGB565;
p_conf.fg_input.offset = 0;
/* Background configuration */
p_conf.bg_input.p_src = (void const*) (uint32_t)&RGB565_64x80_2;
p_conf.bg_input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_NO_MODIF;
p_conf.bg_input.alpha_value = 0xFF;
p_conf.bg_input.color_mode = HAL_DMA2D_INPUT_COLOR_RGB565;
p_conf.bg_input.offset = 0;
p_conf.width = 64;
p_conf.height = 80;
HAL_DMA2D_SetConfigBlending(&hdma2d, &p_conf);
|
|
DMA2D memory-to-memory with blending and fixed color foreground transfer |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M_BLEND_FG;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
/* Foreground Configuration */
hdma2d.LayerCfg[1].AlphaMode = DMA2D_REPLACE_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0x7F;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[1].InputOffset = 0x0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
/* Background Configuration */
hdma2d.LayerCfg[0].AlphaMode = DMA2D_REPLACE_ALPHA;
hdma2d.LayerCfg[0].InputAlpha = 0x7F;
hdma2d.LayerCfg[0].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[0].InputOffset = 0x0;
hdma2d.LayerCfg[0].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[0].RedBlueSwap = DMA2D_RB_REGULAR;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
HAL_DMA2D_ConfigLayer(&hdma2d, 0);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_blending_fixed_color_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_conf.output.p_dest = (void *) OUTPUT_FRAME_BUFFER;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
/* DMA2D input configuration */
p_conf.fixed_color_alpha_mode = HAL_DMA2D_INPUT_ALPHA_REPLACE;
p_conf.fixed_color_argb8888 = 0x7E308080;
p_conf.mem_input.p_src = (void const*) (uint32_t)&RGB565_64x80_1;
p_conf.mem_input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_REPLACE;
p_conf.mem_input.alpha_value = 0x7F;
p_conf.mem_input.color_mode = HAL_DMA2D_INPUT_COLOR_RGB565;
p_conf.mem_input.offset = 0;
p_conf.width = 64;
p_conf.height = 80;
HAL_DMA2D_SetConfigBlendingFixFGColor(&hdma2d, &p_conf);
|
|
DMA2D memory-to-memory with blending and fixed color background transfer |
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M_BLEND_BG;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;
/* Foreground Configuration */
hdma2d.LayerCfg[1].AlphaMode = DMA2D_REPLACE_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0x7F;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[1].InputOffset = 0x0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
/* Background Configuration */
hdma2d.LayerCfg[0].AlphaMode = DMA2D_REPLACE_ALPHA;
hdma2d.LayerCfg[0].InputAlpha = 0x7F;
hdma2d.LayerCfg[0].InputColorMode = DMA2D_INPUT_RGB565;
hdma2d.LayerCfg[0].InputOffset = 0x0;
hdma2d.LayerCfg[0].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[0].RedBlueSwap = DMA2D_RB_REGULAR;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
HAL_DMA2D_ConfigLayer(&hdma2d, 0);
|
hal_dma2d_handle_t hdma2d;
hal_dma2d_blending_fixed_color_config_t p_conf;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_conf.output.p_dest = (void *) OUTPUT_FRAME_BUFFER;
p_conf.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_conf.output.offset = 0;
/* DMA2D input configuration */
p_conf.mem_input.p_src = (void const*) (uint32_t)&RGB565_64x80_1;
p_conf.mem_input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_REPLACE;
p_conf.mem_input.alpha_value = 0x7F;
p_conf.mem_input.color_mode = HAL_DMA2D_INPUT_COLOR_RGB565;
p_conf.mem_input.offset = 0;
p_conf.fixed_color_alpha_mode = HAL_DMA2D_INPUT_ALPHA_REPLACE;
p_conf.fixed_color_argb8888 = 0x7E308080;
p_conf.width = 64;
p_conf.height = 80;
HAL_DMA2D_SetConfigBlendingFixBGColor(&hdma2d, &p_conf);
|
Related concept: Separation of initialization and configuration functions
HAL DMA2D CLUT loading ¶
|
HAL1 |
HAL2 |
|---|---|
|
In HAL1, there are two ways for loading the CLUT:
HAL_DMA2D_CLUTStartLoad(DMA2D_HandleTypeDef *hdma2d, const DMA2D_CLUTCfgTypeDef *CLUTCfg,
uint32_t LayerIdx)
HAL_DMA2D_CLUTStartLoad_IT(DMA2D_HandleTypeDef *hdma2d, const DMA2D_CLUTCfgTypeDef *CLUTCfg,
uint32_t LayerIdx)
HAL_DMA2D_CLUTLoad(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg,
uint32_t LayerIdx)
HAL_DMA2D_CLUTLoad_IT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg,
uint32_t LayerIdx)
HAL_DMA2D_ConfigCLUT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
HAL_DMA2D_EnableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
|
In HAL2, the CLUT transfer configuration is managed by: - in polling mode:
HAL_DMA2D_StartCLUTLoad(hal_dma2d_handle_t *hdma2d, const hal_dma2d_clut_config_t *p_clut_config,
hal_dma2d_input_t input)
- in interrupt mode:
HAL_DMA2D_StartCLUTLoad_IT(hal_dma2d_handle_t *hdma2d, const hal_dma2d_clut_config_t *p_clut_config,
hal_dma2d_input_t input)
|
Related concept: Other HAL DMA2D changes
HAL DMA2D line event program ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMA2D_ProgramLineEvent(DMA2D_HandleTypeDef *hdma2d, uint32_t Line)
|
HAL_DMA2D_EnableWaterMark(hal_dma2d_handle_t *hdma2d, uint32_t line)
|
HAL DMA2D dead time feature enable ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMA2D_EnableDeadTime(DMA2D_HandleTypeDef *hdma2d)
|
HAL_DMA2D_EnableDeadTime(hal_dma2d_handle_t *hdma2d)
|
HAL DMA2D dead time feature disable ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMA2D_DisableDeadTime(DMA2D_HandleTypeDef *hdma2d)
|
HAL_DMA2D_DisableDeadTime(hal_dma2d_handle_t *hdma2d)
|
HAL DMA2D dead time feature configuration ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMA2D_ConfigDeadTime(DMA2D_HandleTypeDef *hdma2d, uint8_t DeadTime)
|
HAL_DMA2D_SetConfigDeadTime(hal_dma2d_handle_t *hdma2d, uint8_t dead_time_cycle)
|